library(tidyverse)
## ── Attaching packages ─────────────────────────────────────── tidyverse 1.3.0 ──
## ✓ ggplot2 3.3.2 ✓ purrr 0.3.4
## ✓ tibble 3.0.3 ✓ dplyr 1.0.1
## ✓ tidyr 1.1.1 ✓ stringr 1.4.0
## ✓ readr 1.3.1 ✓ forcats 0.5.0
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## x dplyr::filter() masks stats::filter()
## x dplyr::lag() masks stats::lag()
library(sf)
## Linking to GEOS 3.8.1, GDAL 3.1.1, PROJ 6.3.1
library(units)
## udunits system database from /Library/Frameworks/R.framework/Versions/4.0/Resources/library/units/share/udunits
library(ggplot2)
library(ggrepel)
library(gghighlight)
library(ggthemes)
library(knitr)
region = data.frame(region = state.region,
state_name = state.name)
south = right_join(USAboundaries::us_states(),
region,
by = "state_name") %>%
filter(region == "South")
plot(south['aland'])
cities = readr::read_csv("~/github/geog-176A-labs/data/uscities.csv") %>%
st_as_sf(coords = c("lng", "lat"), crs = 4326) %>%
st_filter(south, .predicate = st_intersects)
## Parsed with column specification:
## cols(
## city = col_character(),
## city_ascii = col_character(),
## state_id = col_character(),
## state_name = col_character(),
## county_fips = col_double(),
## county_name = col_character(),
## county_fips_all = col_character(),
## county_name_all = col_character(),
## lat = col_double(),
## lng = col_double(),
## population = col_double(),
## density = col_double(),
## source = col_character(),
## military = col_logical(),
## incorporated = col_logical(),
## timezone = col_character(),
## ranking = col_double(),
## zips = col_character(),
## id = col_double()
## )
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
plot(south$geometry)
plot(cities, add= TRUE, pch = 16, cex = .1)
## Warning in plot.sf(cities, add = TRUE, pch = 16, cex = 0.1): ignoring all but
## the first attribute
south_c = st_combine(south) %>%
st_cast("MULTILINESTRING")
south_c = st_transform(south_c, 5070)
cities = st_transform(cities, 5070)
cities = cities %>%
mutate(dist_to_state = st_distance(cities, south_c),
dist_to_state = units::set_units(dist_to_state, "km"),
dist_to_state = units::drop_units(dist_to_state))
big_cities = cities %>%
group_by(state_name) %>%
slice_max(population, n = 2)
ggplot() +
geom_sf(data = south_c) +
geom_sf(data = cities, aes(col = dist_to_state), size = .1) +
geom_sf(data = big_cities, col = "navy") +
scale_color_gradient(low = "gray", high = "red") +
ggthemes::theme_map() +
ggrepel::geom_label_repel(
data = big_cities,
aes(label = city, geometry = geometry),
stat = "sf_coordinates",
size = 4
) +
labs(title = "Labeling Example",
col = "Distance (km)")
ggplot() +
geom_sf(data = south_c) +
geom_sf(data = cities, aes(col = dist_to_state), size = .1) +
gghighlight::gghighlight(population > 10000) +
geom_sf(data = big_cities, col = "navy") +
scale_color_gradient(low = "gray", high = "red") +
ggthemes::theme_map() +
labs(title = "Highlighting Example",
col = "Distance (km)")
## Warning: Could not calculate the predicate for layer 1; ignored
#Question 1:
###1.1
eqdc = '+proj=eqdc +lat_0=40 +lon_0=-96 +lat_1=20 +lat_2=60 +x_0=0 +y_0=0 +datum=NAD83 +units=m +no_defs'
###1.2
library(USAboundaries)
region = data.frame(region = state.region,
state_name = state.name)
USA_states = right_join(USAboundaries::us_states(),
region,
by = "state_name") %>%
filter(!state_abbr %in% c("PR", "AK", "HI"))
USA_states <- st_transform(USA_states, '+proj=eqdc +lat_0=40 +lon_0=-96 +lat_1=20 +lat_2=60 +x_0=0 +y_0=0 +datum=NAD83 +units=m +no_defs')
plot(USA_states$geometry, main = "Map of Continental United States ")
#1.3
library(rnaturalearth)
boundaries = rnaturalearth::countries110 %>%
st_as_sf(crs = 4269) %>%
filter(SOVEREIGNT %in% c ("United States of America", "Canada", "Mexico")) %>%
st_transform(eqdc)
plot(boundaries$geometry)
#1.4
library(readr)
cities = readr::read_csv("~/github/geog-176A-labs/data/uscities.csv") %>%
st_as_sf(coords = c("lng", "lat"), crs = 4326) %>%
filter(!state_name %in% c("Hawaii", "Alaska", "Puerto Rico")) %>%
st_transform(eqdc)
## Parsed with column specification:
## cols(
## city = col_character(),
## city_ascii = col_character(),
## state_id = col_character(),
## state_name = col_character(),
## county_fips = col_double(),
## county_name = col_character(),
## county_fips_all = col_character(),
## county_name_all = col_character(),
## lat = col_double(),
## lng = col_double(),
## population = col_double(),
## density = col_double(),
## source = col_character(),
## military = col_logical(),
## incorporated = col_logical(),
## timezone = col_character(),
## ranking = col_double(),
## zips = col_character(),
## id = col_double()
## )
#Quesrion 2: #2.1
USA_states_string = st_union(USA_states) %>%
st_cast("MULTILINESTRING")
cities = cities %>%
mutate(dist2border = st_distance(cities, USA_states_string),
dist2border = units::set_units(dist2border, "km"),
dist2border = units::drop_units(dist2border))
furthest_cities = cities %>%
slice_max(dist2border, n = 5) %>%
select(city, state_name, dist2border) %>%
st_drop_geometry()
kable(furthest_cities, caption = "The Furthest Cities From the American Boarders",
col.names = c("City", "State", "Distance to Border in km"),
format.args = list(big.mark = ","))
| City | State | Distance to Border in km |
|---|---|---|
| Dresden | Kansas | 1,012.317 |
| Herndon | Kansas | 1,007.750 |
| Hill City | Kansas | 1,005.147 |
| Atwood | Kansas | 1,004.734 |
| Jennings | Kansas | 1,003.646 |
#2.2
USA_states_string2 = st_combine(USA_states) %>%
st_cast("MULTILINESTRING")
cities = cities %>%
mutate(dist2state = st_distance(cities, USA_states_string2),
dist2state = units::set_units(dist2state, "km"),
dist2state = units::drop_units(dist2state))
furthest_cities_from_state = cities %>%
slice_max(dist2state, n = 5) %>%
select(city, state_name, dist2state) %>%
st_drop_geometry()
kable(furthest_cities_from_state, caption = "The Furthest Cities From State Border",
col.names = c("City", "State", "Distance to State Border in km"),
format.args = list(big.mark = ","))
| City | State | Distance to State Border in km |
|---|---|---|
| Lampasas | Texas | 308.9216 |
| Bertram | Texas | 302.8190 |
| Kempner | Texas | 302.5912 |
| Harker Heights | Texas | 298.8125 |
| Florence | Texas | 298.6804 |
#2.3
Mexico_border = boundaries %>%
filter(SOVEREIGNT == "Mexico")
cities = cities %>%
mutate(dist2Mexico = st_distance(cities, Mexico_border),
dist2Mexico = units::set_units(dist2Mexico, "km"),
dist2Mexico = units::drop_units(dist2Mexico))
furthest_cities_from_Mexico = cities %>%
slice_max(dist2Mexico, n = 5) %>%
select(city, state_name, dist2Mexico) %>%
st_drop_geometry()
kable(furthest_cities_from_Mexico, caption = "Furthest Cities From Mexico Border",
col.names = c("City", "State", "Distance to Mexico Border in km"),
format.args = list(big.mark = ","))
| City | State | Distance to Mexico Border in km |
|---|---|---|
| Caribou | Maine | 3,250.334 |
| Presque Isle | Maine | 3,234.570 |
| Calais | Maine | 3,134.348 |
| Eastport | Maine | 3,125.624 |
| Old Town | Maine | 3,048.366 |
#2.4
canada_border = boundaries %>%
filter(SOVEREIGNT == "Canada")
cities = cities %>%
mutate(dist2Canada = st_distance(cities, canada_border),
dist2Canada = units::set_units(dist2Canada, "km"),
dist2Canada = units::drop_units(dist2Canada))
furthest_cities_from_Canada = cities %>%
slice_max(dist2Canada, n = 5) %>%
select(city, state_name, dist2Canada) %>%
st_drop_geometry()
kable(furthest_cities_from_Canada, caption = "Furthest Cities From Mexico Border",
col.names = c("City", "State", "Distance to Mexico Border in km"),
format.args = list(big.mark = ","))
| City | State | Distance to Mexico Border in km |
|---|---|---|
| Guadalupe Guerra | Texas | 2,206.455 |
| Sandoval | Texas | 2,205.641 |
| Fronton | Texas | 2,204.784 |
| Fronton Ranchettes | Texas | 2,202.118 |
| Evergreen | Texas | 2,202.020 |
#Question 3 #3.1
big_cities = cities %>%
slice_max(population, n = 10)
ggplot()+
geom_sf(data = boundaries)+
geom_sf(data = USA_states_string2)+
geom_sf(data = big_cities, col = "red", size = 1.5)+
ggthemes::theme_map()+
labs(title = "The 10 Most Populated Cities in the US")+
ggrepel::geom_label_repel(
data = big_cities,
aes(label = city, geometry = geometry),
stat = "sf_coordinates",
size = 3
)
#3.2
furthest_cities2 = cities %>%
slice_max(dist2border, n = 5) %>%
select(city, state_name, dist2border)
ggplot()+
geom_sf(data = cities, aes(col = dist2border), size = .5)+
geom_sf(data = furthest_cities2, col = "blue")+
geom_sf(data = USA_states_string)+
scale_color_gradient(low = "white", high = "red")+
ggthemes::theme_map()+
labs(title = "5 Furthest Cities From Country Borders and Distance From Boarder")+
ggrepel::geom_label_repel(
data = furthest_cities2,
aes(label = city, geometry = geometry),
stat = "sf_coordinates",
size = 3
)
#3.3
furthest_cities3 = cities %>%
slice_max(dist2state, n = 5) %>%
select(city, state_name, dist2state)
ggplot()+
geom_sf(data = cities, aes(col = dist2state), size = .5)+
geom_sf(data = furthest_cities3, col = "blue")+
geom_sf(data = USA_states_string2)+
scale_color_gradient(low = "white", high = "red")+
ggthemes::theme_map()+
labs(title = "5 Furthest Cities From State Borders and Distance From Boarder")+
ggrepel::geom_label_repel(
data = furthest_cities3,
aes(label = city, geometry = geometry),
stat = "sf_coordinates",
size = 3
)
#3.4
cities = cities %>%
mutate(distance_Can_Mex = abs(dist2Canada - dist2Mexico))
equa_Can_Mex = cities %>%
filter(distance_Can_Mex < 100)
biggest_equa_Can_Mex = equa_Can_Mex %>%
slice_max(population, n = 5)
ggplot()+
geom_sf(data = boundaries)+
geom_sf(data = USA_states_string)+
geom_sf(data = equa_Can_Mex, color = "green", size = .5)+
geom_sf(data = biggest_equa_Can_Mex, color = "red", size = .5)+
ggthemes::theme_map()+
labs(title = "Cities Equadistant from Canada and Mexico Borders")+
ggrepel::geom_label_repel(
data = biggest_equa_Can_Mex,
aes(label = city, geometry = geometry),
stat = "sf_coordinates",
size = 3
)
#Question 4 #4.1
Border_zone = cities %>%
mutate(Mex_cities = dist2Mexico < 160) %>%
mutate(Can_cities = dist2Canada < 160) %>%
filter(!Mex_cities %in% "FALSE" | !Can_cities %in% "FALSE")
#According to the data. there are 3296 cities in the boarder zone.
sum(Border_zone$population)
## [1] 47082122
#According to the sum function for Border_zone, the population in the border zone is 47,082,122. This however may be skewed becauset the website says there shoul be 200 million people in the border zone.
sum(cities$population)
## [1] 397213686
#According to the sum function for the cities data frame, there are 397,216,686 people in the United States. This means. That the ratio of people in the border zone to people in the US is as follows:
sum(Border_zone$population) / sum(cities$population)
## [1] 0.118531
#4.2
ggplot()+
geom_sf(data = cities, aes(col = dist2border), size = .5)+
geom_sf(data = Border_zone, col = "blue")+
geom_sf(data = USA_states_string2)+
scale_color_gradient(low = "white", high = "red")+
ggthemes::theme_map()+
labs(title = "5 Furthest Cities From State Borders and Distance From Boarder")+
ggrepel::geom_label_repel(
data = furthest_cities3,
aes(label = city, geometry = geometry),
stat = "sf_coordinates",
size = 3
)